package com.airlines.crewassignment.service.crew;

import com.airlines.crewassignment.domain.Crew;
import com.airlines.crewassignment.domain.Position;
import com.airlines.crewassignment.domain.Tech;

/**
 * @author xxxx
 * @date 2018年3月26日 
 * @description 本方法默认所有的授权均是排班授权
 */
public interface TechService {
	
	/**
	 * 机长最低授权构造
	 * @return
	 */
	Tech CaptainTechLowestBuilder(String acType);
	
	/**
	 * 副驾最低授权构造
	 * @return
	 */
	Tech CopilotTechLowestBuilder(String acType);
	
	/**
	 * 根据号位，构造最低排班授权
	 * 一号位，必须选择责任机长及以上
	 * 二号位，如果是机长岗位，则必须是航线机长以上
	 * 第一副驾F4至副驾驶
	 * 第二副驾F2至F4
	 * @param position
	 * @return
	 */
	Tech getTechLowest(Position position);
	
	/**
	 * 获取最高授权
	 * @param position
	 * @return
	 */
	Tech getTechHighest(Position position);
	
	/**
	 * 判断本授权 是否比 另外一个授权 高，或者相等
	 * 注意，如果机号或者类型不同，直接返回false
	 * 如果有一个为null ，也返回false
	 * @param thisTech
	 * @param otherTech
	 * @return
	 */
	boolean techHightOrEqualThanOther(Tech thisTech,Tech otherTech);
	
	/**
	 * 判断某个人的排班授权，是否符合号位的最低最高要求
	 * @param crew
	 * @param position
	 * @return
	 */
	boolean CrewTechIsAbleForPositionTech(Crew crew,Position position);
	
	/**
	 * 根据某个人的授权列表，获取某个机型下的授权
	 * @param crew
	 * @param position
	 * @return
	 */
	Tech getTechZByPosition(Crew crew,String acType);
	
	/**
	 * 是否是飞行教员的授权
	 * @param tech
	 * @return
	 */
	boolean isTeacher(Tech tech);

	/**
	 * 是否是飞行新机长授权
	 * @param t
	 * @return
	 */
	boolean isNewCaption(Tech tech);
}
